﻿/*
* Copyright (c) 2022,
* All rights reserved.
*
* 文件名称：character.h
* 创建日期：2022/4/20
* 摘 要：角色类接口声明
*
* 当前版本：0.1
* 作 者：mason
* 完成日期：
*/

#ifndef CHARACTER_H
#define CHARACTER_H

#include <QWidget>
#include <QVector>
#include <QPainter>
#include <QDebug>
#include <QKeyEvent>
#include <QImage>
#include <QPixmap>

/* 跑动帧图片索引 */
#define FRAM_RUN_BEGIN  6
#define FRAM_RUN_END    9

/* 站立帧图片索引 */
#define FRAM_STAND_BEGIN    1
#define FRAM_STAND_END      5

/* 攻击帧图片索引 */
#define FRAM_ATTACK_BEGIN   10
#define FRAM_ATTACK_END     14

/* 默认移动速度 */
#define DEFAULT_MOVE_SPEED  10

/* 跑动帧切换速度 */
#define FPS_RUN     100
#define FPS_STAND   300
#define FPS_ATTACK  300

/* 角色动作 */
typedef enum {
    ACTION_RUN = 0,     //跑动
    ACTION_STAND,       //站立
    ACTION_ATTACK,      //攻击
    ACTION_MAX
}ACTION;



namespace Ui {
class Character;
}


class Character : public QWidget
{
    Q_OBJECT

public:
    explicit Character(QString img_path = "", int img_num = 0, QWidget *parent = 0);
    ~Character();
    void moveRight();
    void moveLeft();
    void moveUp();
    void moveDown();
    void setFrame(int m_begin, int m_end);    //指定动画帧
    void setFrame(ACTION action);
    void setMoveSpeed(int m_speed);     //移动速度设置
    void keyboardMoveSet(bool m_move_enable);   /* 是否开启键盘控制移动 */
    void setFps(int m_fps);

protected:
    void paintEvent(QPaintEvent * event);
    void timerEvent(QTimerEvent *);
    void keyPressEvent(QKeyEvent *event);
private:
    Ui::Character *ui;
    QVector<QPixmap > pixmap_list;  //动画帧
    QVector<QPixmap > pixmap_list_mirrored;     //镜像动画
    int fps;                //帧率
    int pixmap_index;               //当前帧
    int pixmap_begin;
    int pixmap_end;
    int pixmap_num;                 //帧数
    bool is_pixmap_mirrored;           //是否镜像
    //移动
    bool move_enable;      //开启移动
    int move_speed;  // 移动速度

    int time_fd;    //定时器


};

#endif // CHARACTER_H
